%        File: bozza_classi.tex
%     Created: gio giu 23 02:00  2011 C
% Last Change: gio giu 23 02:00  2011 C
%
\documentclass[italian,a4paper]{article}
\usepackage{babel}
\usepackage[text={6in,9in},centering]{geometry}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ae,aecompl}
\frenchspacing
\pagestyle{plain}

\title{Bozza delle classi e strutture}
\author{Paolo Pigato\\Davide Poletti}
\begin{document}
\maketitle
Il main viene lanciato da linea di comando e visualizza un menù, gestito
dalla classe Menu.

\section*{classe Menu}
Permette di 
\begin{itemize}
    \item   impostare le opzioni di gioco
    \item   avviare il gioco
    \item   uscire dal programma
\end{itemize}

\section*{classe Opzioni}
Contine i seguenti attributi
\begin{itemize}
    \item dimensione della matrice
    \item giocatore umano, cpu
    \item \ldots
\end{itemize}      

\section*{struttura esito}
Contiene le informazioni sull'esito di un attacco. \`E costituita da tre
bool colpito, affondato, perso.

\section*{classe GameManager}
Viene creato dalla classe Menu, passandogli l'oggetto di tipo Opzioni,
all'avvio del gioco.
L'oggetto di tipo GameManager gestisce tutta la fase di gioco. Gestisce
l'inizializzazione del gioco, i turni, la comunicazione tra i
giocatori e la fine della partita.

\subsection*{Attributi}
\subsubsection*{Opzioni}
Contiene tutte le opzioni passate come argomento al costruttore di
GameManager.
\subsubsection*{Giocatori}
Due oggetti di tipo Giocatore
\begin{itemize}
    \item giocatore1
    \item giocatore2
\end{itemize}
\subsubsection*{turno}
\`E una variabile booleana che viene utilizzata nell'identificare a chi tocca
giocare.

\subsection*{Metodi}
\subsubsection*{Partita}
Invoca il metodi InizializzaPartita.
Gestisce la sequenza di turni: invoca FaiTurno comunicandogli chi attacca e
chi difende.
Dopo ogni turno riconosce se un giocatore ha perso, in tal caso comunica il
vincitore.

\subsubsection*{InizializzaPartita}
Crea un oggetto giocatore (umano o cpu a seconda delle opzioni) il quale
decide numero e dimensioni delle navi.
Chiede al giocatore la lista delle navi.
Crea il secondo giocatore  (umano o cpu a seconda delle opzioni) con lo
stesso tipo di navi.

\subsubsection*{FaiTurno}
Riceve l'attaccante e il difensore come argomenti.\\
Chiede all'attaccante di sparare e riceve le cooordinate.\\
Comunica le cooordinate al difensore.\\
Riceve dal difensore una struttura esito.\\
Comunica all'attaccante l'esito e le coordinate dello sparo.\\
Restituisce l'esito.\\

\section*{classe Giocatore}
\`E una classe astratta
\subsection*{Attributi}
\subsubsection*{Navi}
\`E una lista delle proprie navi
\subsubsection*{Mare}
\`E il mare in in cui ``spara''; è una matrice di caselle.
\subsubsection*{Strategia}

\subsection*{Metodi}
\subsubsection*{PosizionaNavi}
Può ricevere come argomento la tipologia e il numero di navi da posizionare.
Se non riceve argomenti sceglie la tipologia e il numero di navi a suo
piacimento.\\
Posiziona le navi.

\subsubsection*{Spara}
Consulta il Mare e restituisce le coordinate dello sparo.

\subsubsection*{AggiornaMare}
Riceve come argomento l'esito e le coordiante del suo attacco.
Aggiorna la casella nel mare di coordinate date con l'esito.

\subsubsection*{ComunicaEsito}
Riceve le coordinate dell'attacco avversario. Controlla nella lista delle
navi se quella casella è occupata da una nave. In caso affermativo controlla
se la nave è affondata. In caso affermativo controlla se tutte le navi sono
state affondate.\\
Ritorna un esito.

\section*{struttura casella}
\`E costituita da tre variabili booleane che riportano se il giocatore ha
già sparato nella casella, se nella casella è posizionata una nave e se
quella nave è stata affondata.

\section*{classe Nave}
\`E una classe astratta. Contiene la lista delle caselle che occupa (o le
coordinate), una variabile booleana che afferma che la nave è stata
affondata. \`E in grado di sapere se occupa una casella con coordinate date.
Contiene i metodi per il posizionamento delle navi a inizio gioco.

\end{document}

